Проекты из
нескольких форм и модулей
Работа с несколькими формами
Все проекты, которые мы до этого создавали, работали в
одном окне. Окном этим служила форма, на которой мы и собирали проект. Однако
вы вполне можете создать проект, который работает в двух или нескольких окнах.
Посмотрим,
как создать в проекте еще одну форму и как наладить простейшее взаимодействие
между двумя формами.
Создадим новый проект. При этом, как обычно, будет
создана форма Form1. Чтобы
добавить в проект еще одну форму, нужно выбрать Project-»Add Form-»New-»Form->Open. Откроется форма Form2, а при ней свое окно кода. Таким образом, вы
видите, что Visual Basic предоставляет удобную возможность программировать
все происходящее в новой форме в окне кода, принадлежащем именно этой форме.
Поместим для удобства рядом, обе формы со своими окнами кода. Разместим на
формах элементы управления, а в окна кода запишем программный текст.
- Запустим проект. Мы видим, как
и положено, Forml, а вот Form2 не появляется.
Чтобы она появилась, нужно выполнить оператор Form2.Show. Щелкнем по Commandl - форма Form2 появилась.
В каждом окне кода можно, как и обычно, писать
операторы, приказывающие что-то сделать в форме-хозяине данного окна, а можно с
таким же успехом писать операторы, приказывающие что-то сделать в любой другой
форме проекта. Чтобы Visual Basic
отличал первый случай от второго, во втором случае перед именем свойства,
принадлежащего другой форме, нужно писать имя этой формы с точкой, в первом же
случае - не обязательно. Не
обязательно, но можно. Так, в
левом окне вместо BackColor = vbBlue можно было бы написать Forml.BackColor = vbBlue или даже так:
Me.BackColor = vbBlue. Слово Me является указанием на хозяина.
Чуть позже вы увидите, что из одной
формы можно обращаться не только к свойствам, объектам и методам, принадлежащим
другой форме, но и к переменным, процедурам и другим элементам. Правило везде
одно:
Перед
именем элемента, принадлежащего другой форме, нужно ставить имя
формы-хозяина с точкой.
Модули
кода
Пусть
вы создали проект из двух форм: в одной игра в шахматы, и другой игра в тетрис.
Каждая из форм при запуске проекта довольно долго загружается. Поэтому вы
хотите, чтобы перед загрузкой форм компьютер спросил у вас, какую форму нужно
загружать. Но мы привыкли, что при запуске проекта на экране какая-нибудь
форма появляется обязательно и в первую очередь. Мы можем изменить этот порядок
и сделать так, чтобы никакая форма не загружалась.
Добавим
в проект так называемый модуль кода (его
еще называют программным, или стандартным, или просто модулем): Project —>Add Module—»New-»Module—»Ореn. Вы
видите, что в проект добавилось окно кода модуля Module1. А ничего похожего на форму не
появилось. Ни формы, ни кнопок, ни меток, никаких других элементов управления
в модуле кода нет и быть не может. Если форма без кода — тело без души, то
модуль - душа без тела.
Проект можно
настроить так, чтобы при запуске ни одна форма не загружалась, а выполнялась
процедура со специальным названием Main, находящаяся
в модуле кода. Запишем в окно кода нашего модуля 4 строки:
Sub Main()
y=InputBox(«Выбираем первый вариант или второй?»
, «Введите 1 или 2»)
if y=1 Then Form1.show else Form2.show
End Sub
А вот как настраивать
проект: Project -» Projectl Properties -» General -> Startup Object -» здесь Visual Basic предложит вам
выбор, с чего начинать запуск проекта - с загрузки формы Forml, с загрузки формы Form2 или с выполнения процедуры Main. Вы, конечно, выбираете -»Sub Main-»OK.
Запустив этот
проект, вы не видите никакой формы, вместо этого перед вами InputBox с приглашением ввести 1 или 2. Введя
1, вы тем самым загружаете Forml, а введя 2 -
Form2.
Термином модуль часто называют не
только модуль кода, но и форму, и неизвестный пока нам модуль класса, и
некоторые другие сохраняемые в собственных файлах главные компоненты проекта
Структура проекта. Окно Project Explorer
Работа с несколькими модулями
Каждый из
модулей сохраняется на диске в своем файле. Щелкая в окне Project Explorer по нужному модулю, а затем по одной
из двух кнопок слева на панели окна; мы можем удобно переключаться между
различными окнами модулей.
Вы можете
удалять модулями из проекта, щелкая правой клавишей мыши в окне- Project Explorer по ненужному модулю, а затем в
открывшемся контекстном меню выбирая Remove. Так, если у
вас простой вычислительный проект, вы вообще можете удалить все формы, обойдясь
одним только модулем кода. Для ввода информации в компьютер вам достаточно
будет использовать InputBox, для вывода
- MsgBox, а для
вычислений - процедуры в модуле кода.
Работа с несколькими проектами
При работе с Visual Basic довольно часто встречаются ситуации,
когда необходимо открыть в среде Visual Basic одновременно два или несколько
проектов. Причина может быть разная, самая тривиальная -необходимость удобного
копирования отдельных частей программного текста из одного проекта в другой. Если вы добавили новый проект, то при
сохранении он попытается сохранить свои файлы в ту же папку, где сохранен
первый проект. Не стоит этого разрешать, а если уж разрешили, то проследите,
чтобы имена файлов в обоих проектах различались, иначе файлы нового проекта затрут
одноименные файлы первого.
Какой из двух проектов будет запускаться,
когда вы привычно нажмете кнопку Start на панели инструментов? Вы сами можете это
задать, щелкнув правой клавишей мыши в окне Project Explorer по названию нужного проекта, а затем в
открывшемся контекстном меню выбрав Set as Start Up.
Для
переменных в Visual Basic определены 3 зоны видимости:
|
Зона видимости |
Видны |
Объявляются оператором |
|
1. Локальные переменные
процедуры |
Только внутри процедуры, в которой они
объявлены |
Dim, внутри процедуры' |
|
2. Локальные переменные модуля |
Везде
внутри модуля, в котором они объявлены. Из других модулей не видны |
Dim или Private, в
верхней части модуля, снаружи процедур |
|
3.
Глобальные (общедоступные) переменные проекта |
Отовсюду изо всех модулей проекта |
Public, в верхней части модуля, снаружи процедур |
Как видите, первая зона - самая узкая, третья - самая широкая.
Аналогичным образом можно удалить проект из среды (не с диска), выбрав в
этом же контекстном меню Remove Project.
Зоны
видимости
Зоны видимости переменных
А теперь поговорим о важном средстве
обеспечения удобства и надежности программирования на Visual Basic - о механизме задания зон видимости
переменных, процедур и других элементов Visual Basic. В 17.2 мы уже сталкивались с этим
механизмом, когда переменные, объявленные внутри процедуры, являлись
локальными в процедуре, то есть невидимыми снаружи процедуры. Поэтому их
нельзя было использовать в других процедурах модуля. Если вы подзабыли этот
параграф, то сейчас перечтите.
Пример окна кода:
Public a As I nteger Гповальная переменная Private b As Integer Шкальная переменная модуля
Private Sub Command1_Click()
Private с As Integer 'Локальная переменная процедуры
End Sub
С первыми двумя зонами видимости вы знакомы. С третьей зоной сейчас познакомимся.
Вот как можно из одного модуля обращаться к глобальным переменным, объявленным
в другом модуле. Пусть в нашем проекте созданы 2 формы: Form1 и Form2. Вот окно кода формы 1: Public a As Integer
Private Sub Command1_Click()
Form2.Show
a = 1
End Sub
Оператор Public объявляет переменную а как глобальную (или общедоступную), видимую изо
всех модулей. Щелкнув по кнопке формы 1, вы присваиваете переменной а значение
1. Вот окно кода формы 2:
Private Sub Command1_Click()
Debug.Print
Forml.а
End Sub
Щелкнув по кнопке формы 2, вы печатаете 1 -
правильное значение переменной а.
Откройте
сначала обычным образом один проект. Чтобы открыть еще и другой, вам нельзя
использовать, как вы привыкли, File—> Open Project (открыть
проект), так как при этом уже открытый проект закроется. Нужно использовать File-»Add Project (добавить
проект). Откроется диалоговое окно, глядя в которое вы должны решить, хотите
ли вы добавить в среду разработки новый проект (закладка New) или же один из уже существующих
(закладка Existing). Затем выбираете нужный проект и ->Ореn. Теперь на экране вы можете видеть
одновременно все формы и окна кода обоих проектов.